package com.bird.system.domain.role

import com.bird.component.ddd.model.entity.AggregateRoot
import com.bird.component.ddd.model.entity.BaseEntity
import com.bird.component.lang.util.paramcheck.toCheck
import com.bird.system.domain.role.vo.RoleDataScope

class RoleEntity(
    /**
     * 角色名称
     */
    var roleName: String,
    /**
     * 角色权限字符串
     */
    var roleKey: String,
    /**
     * 显示顺序
     */
    var roleSort: Int,
    /**
     * 数据范围（1：所有数据权限；2：自定义数据权限；3：本部门数据权限；4：本部门及以下数据权限；5：仅本人数据权限）
     */
    var roleDataScope: RoleDataScope?,
    /**
     * 角色状态（1正常 2停用）
     */
    var roleStats: Int = 1,
    /**
     * 可访问菜单列表
     */
    var menus: List<Long> = listOf(),
    /**
     * 角色所属部
     */
    var deptIds: List<Long> = listOf(),

): BaseEntity(), AggregateRoot {

    /**
     * 角色实体校验
     */
    fun validate() {
        toCheck {
            notEmpty("角色名称", value = roleName)
            notEmpty("角色权限字符串", value = roleKey)
            notEmpty("显示顺序", value = roleSort)
            customize(roleName){
                it.length.run {
                    this <= 30
                }
            }.orTip("角色名称长度不能超过30")
            customize(roleKey){
                it.length.run {
                    this <= 100
                }
            }.orTip("角色权限字符串长度不能超过100")

        }
    }


}